En Ruby, passer au-delà du chemin facile signifie passer d'une logique linéaire à une posture défensive où les échecs sont traités comme objets de première classe plutôt que comme des catastrophes qui mettent fin au programme.
1. La hiérarchie des exceptions
Ruby pré-définit une hiérarchie bien organisée des exceptions illustrée dans la Figure 8.1. Chaque erreur est une instance d'une classe de cet arbre, commençant par la classe Exception racine. Comprendre cet arbre est essentiel : les erreurs de niveau application descendent généralement de StandardError, tandis que les échecs de niveau système (comme NoMemoryError) descendent directement de classe Exception.
2. Les erreurs comme objets de données
Contrairement aux langages de bas niveau où une erreur pourrait être un simple code de retour, Ruby emballage du contexte—y compris la chaîne de message et le déroulement d'exécution—dans un objet formel. Cela permet aux développeurs de traiter les interruptions en cours d'exécution comme des données pouvant être inspectées et gérées par héritage.